package com.hksj.jetlinks.serialize;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

public interface DateFormatter {
    List<DateFormatter> supportFormatter = new ArrayList(Arrays.asList(SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.MM, SmartDateFormatter.dd}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.MM, SmartDateFormatter.slash, SmartDateFormatter.dd}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.MM, SmartDateFormatter.month_cn, SmartDateFormatter.dd, SmartDateFormatter.day_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.MM, SmartDateFormatter.slash, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.MM, SmartDateFormatter.dd, SmartDateFormatter.HH, SmartDateFormatter.mm, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.M, SmartDateFormatter.month_cn, SmartDateFormatter.d, SmartDateFormatter.day_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.MM, SmartDateFormatter.month_cn, SmartDateFormatter.d, SmartDateFormatter.day_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.M, SmartDateFormatter.month_cn, SmartDateFormatter.dd, SmartDateFormatter.day_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.d}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.d}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.dd}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.d}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.MM, SmartDateFormatter.slash, SmartDateFormatter.d}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.dd}), SmartDateFormatter.of("yyyy-MM-dd HH:mm:ssZ", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.plus, SmartDateFormatter.Z}), SmartDateFormatter.of("yyyy-MM-dd HH:mm:ss.SSSZ", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS, SmartDateFormatter.plus, SmartDateFormatter.Z}), SmartDateFormatter.of("yyyy-MM-dd HH:mm:ss.SSSXXX", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS, SmartDateFormatter.XXX}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ss", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ssZ", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.plus, SmartDateFormatter.Z}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ssXXX", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.plus, SmartDateFormatter.XXX}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ss.SSS", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ss.SSSZ", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS, SmartDateFormatter.plus, SmartDateFormatter.Z}), SmartDateFormatter.of("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.T, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.str("."), SmartDateFormatter.SSS, SmartDateFormatter.XXX}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.MM, SmartDateFormatter.month_cn, SmartDateFormatter.dd, SmartDateFormatter.day_cn, SmartDateFormatter.HH, SmartDateFormatter.hour_cn, SmartDateFormatter.mm, SmartDateFormatter.minute_cn, SmartDateFormatter.ss, SmartDateFormatter.second_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.MM, SmartDateFormatter.month_cn, SmartDateFormatter.dd, SmartDateFormatter.day_cn, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.hour_cn, SmartDateFormatter.mm, SmartDateFormatter.minute_cn, SmartDateFormatter.ss, SmartDateFormatter.second_cn}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.M, SmartDateFormatter.strike, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.strike, SmartDateFormatter.MM, SmartDateFormatter.strike, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.MM, SmartDateFormatter.slash, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.M, SmartDateFormatter.slash, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.slash, SmartDateFormatter.MM, SmartDateFormatter.slash, SmartDateFormatter.d, SmartDateFormatter.blankSpace, SmartDateFormatter.H, SmartDateFormatter.colon, SmartDateFormatter.m, SmartDateFormatter.colon, SmartDateFormatter.s}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.MM, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss}), SmartDateFormatter.of(new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.MM, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.mm, SmartDateFormatter.ss}), SmartDateFormatter.of("yyyy年 MM月 dd日 EEE HH:mm:ss zzz", new SmartDateFormatter.Part[]{SmartDateFormatter.yyyy, SmartDateFormatter.year_cn, SmartDateFormatter.blankSpace, SmartDateFormatter.MM, SmartDateFormatter.month_cn, SmartDateFormatter.blankSpace, SmartDateFormatter.dd, SmartDateFormatter.day_cn, SmartDateFormatter.blankSpace, SmartDateFormatter.weeks3, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.blankSpace, SmartDateFormatter.zzz}).withLocal(Locale.CHINA), SmartDateFormatter.of("EEE MMM dd HH:mm:ss zzz yyyy", new SmartDateFormatter.Part[]{SmartDateFormatter.weeks3, SmartDateFormatter.blankSpace, SmartDateFormatter.month3, SmartDateFormatter.blankSpace, SmartDateFormatter.dd, SmartDateFormatter.blankSpace, SmartDateFormatter.HH, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.blankSpace, SmartDateFormatter.zzz, SmartDateFormatter.blankSpace, SmartDateFormatter.yyyy}).withLocal(Locale.ENGLISH), SmartDateFormatter.of("MMM dd, yyyy K:mm:ss a", new SmartDateFormatter.Part[]{SmartDateFormatter.month3, SmartDateFormatter.blankSpace, SmartDateFormatter.dd, SmartDateFormatter.str(","), SmartDateFormatter.blankSpace, SmartDateFormatter.yyyy, SmartDateFormatter.blankSpace, SmartDateFormatter.K, SmartDateFormatter.colon, SmartDateFormatter.mm, SmartDateFormatter.colon, SmartDateFormatter.ss, SmartDateFormatter.blankSpace, SmartDateFormatter.a}).withLocal(Locale.ENGLISH)));

    boolean support(String var1);

    Date format(String var1);

    String toString(Date var1);

    String getPattern();

    static Date fromString(String dateString) {
        DateFormatter formatter = getFormatter(dateString);
        return formatter != null ? formatter.format(dateString) : null;
    }

    static Date fromString(String dateString, String pattern) {
        DateFormatter formatter = getFormatter(dateString);
        return formatter != null ? formatter.format(dateString) : DateTimeFormat.forPattern(pattern).parseDateTime(dateString).toDate();
    }

    static String toString(Date date, String format) {
        if (null == date) {
            return null;
        } else {
            Iterator var2 = supportFormatter.iterator();

            DateFormatter formatter;
            do {
                if (!var2.hasNext()) {
                    return (new DateTime(date)).toString(format);
                }

                formatter = (DateFormatter)var2.next();
            } while(!formatter.getPattern().equals(format));

            return formatter.toString(date);
        }
    }

    static boolean isSupport(String dateString) {
        return getFormatter(dateString) != null;
    }

    static DateFormatter getFormatter(String dateString) {
        if (dateString != null && dateString.length() >= 4) {
            Iterator var1 = supportFormatter.iterator();

            DateFormatter formatter;
            do {
                if (!var1.hasNext()) {
                    return null;
                }

                formatter = (DateFormatter)var1.next();
            } while(!formatter.support(dateString));

            return formatter;
        } else {
            return null;
        }
    }
}
